package com.train.webadmin.app.dto;

import com.train.common.core.validator.UpdateGroup;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.*;

/**
 * 试卷题目Dto对象。
 *
 * @author xulei
 * @date 2025-03-07
 */
@Schema(description = "试卷题目Dto对象")
@Data
public class TQuestionInfoDto {

    /**
     * 题目id。
     */
    @Schema(description = "题目id。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，题目id不能为空！", groups = {UpdateGroup.class})
    private Long id;

    /**
     * 课程id。
     */
    @Schema(description = "课程id。", requiredMode = Schema.RequiredMode.REQUIRED)
//    @NotNull(message = "数据验证失败，课程id不能为空！")
    private Long courseId;

    /**
     * 试卷id。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "试卷id。可支持等于操作符的列表数据过滤。")
    private Long paperId;

    /**
     * 题干。
     */
    @Schema(description = "题干。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，题干不能为空！")
    private String title;

    /**
     * 类型。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "类型。可支持等于操作符的列表数据过滤。")
    private Integer types;

    /**
     * 解析。
     */
    @Schema(description = "解析。")
    private String remark;

    /**
     * 分数。
     */
    @Schema(description = "分数。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，分数不能为空！")
    private Double score;

    /**
     * 难度。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "难度。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，难度不能为空！")
    private Integer degree;

    /**
     * 正确答案。
     */
    @Schema(description = "正确答案。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，正确答案不能为空！")
    private String correctAnswer;

    /**
     * 选项。
     */
    @Schema(description = "选项。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，选项不能为空！")
    private String options;
}
